/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modele;

import Bdd.VipRepository;
import Metier.Vip;
import java.sql.Date;
import java.util.ArrayList;

/**
 *
 * @author p0925231
 */
public class ModeleVip extends javax.swing.table.AbstractTableModel implements Modele {

    /* Attributs privée */
    private String[] nomsColonnes = {"Index", "Name", "Surname", "Surname 2", "Surname 3", "Birth date", "Birth place", "Nationality", "Sex", "State"};
    private ArrayList<Vip> donnees;
    private VipRepository vipRepo;
    
    /* Constructeurs */
    public ModeleVip() {
        donnees = new ArrayList<Vip>();
        vipRepo = new VipRepository();
    }

    /* Methodes publiques */
    public int getColumnCount() {
        return nomsColonnes.length;
    }
    public int getRowCount() {
        return donnees.size();
    }
    public String getColumnName(int col) {
        return col >= 0 ? nomsColonnes[col] : null;
    }
    public Object getValueAt(int row, int col) {
        switch(col) {
            case 0:
                return donnees.get(row).getId();
            case 1:
                return donnees.get(row).getNom();
            case 2:
                return donnees.get(row).getPrenom1();
            case 3:
                return donnees.get(row).getPrenom2();
            case 4:
                return donnees.get(row).getPrenom3();
            case 5:
                return donnees.get(row).getDate_naiss();
            case 6:
                return donnees.get(row).getLieu_naiss();
            case 7:
                return donnees.get(row).getNationalite();
            case 8:
                return (donnees.get(row).getSexe())?"Homme":"Femme";
            default:
                return (donnees.get(row).getCelib())?"Single":"Married";
        }
    }
    @Override
    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }
    @Override
    public boolean isCellEditable(int row, int col) {
        if(col==0 || col==9 || col==8 || col==6 || col==5) {
            return false;
        }
        return true;
    }
    public void setValueAt(Object value, int row, int col) {
        switch(col) {
            case 0:
                donnees.get(row).setId((Integer)value);
                break;
            case 1:
                donnees.get(row).setNom((String)value);
                break;
            case 2:
                donnees.get(row).setPrenom1((String)value);
                break;
            case 3:
                donnees.get(row).setPrenom2((String)value);
                break;
            case 4:
                donnees.get(row).setPrenom3((String)value);
                break;
            case 5:
                donnees.get(row).setNationalite((String)value);
                break;
            case 6:
                donnees.get(row).setLieu_naiss((String)value);
                break;
            case 7:
                donnees.get(row).setDate_naiss((Date)value);
                break;
            default:
                donnees.get(row).setSexe((Boolean)value);
                break;
        }
        Vip tmpVip = donnees.get(row);
        suppLigne(row);
        ajoutLigne(tmpVip);
        fireTableCellUpdated(row, col);
    }
    public void showData(ArrayList list) {
        donnees.clear();
        for(Vip vip : (ArrayList<Vip>)list)
            ajoutLigne(vip);
    }
    public void ajoutLigne(Object p) {
        donnees.add((Vip)p);
        int ligne = donnees.size() - 1;
        fireTableChanged(new javax.swing.event.TableModelEvent(
                this, ligne, ligne, javax.swing.event.TableModelEvent.ALL_COLUMNS,
                javax.swing.event.TableModelEvent.INSERT));
    }

    public void suppLignes(int[] lesLignes) {
        int nb = lesLignes.length;
        if (nb != 0) {
            java.util.ArrayList<Vip> donneesSupprimees = new java.util.ArrayList<Vip>();
            for (int i = 0; i < nb; i++) {
                donneesSupprimees.add(donnees.get(lesLignes[i]));
            }
            donnees.removeAll(donneesSupprimees);
            fireTableRowsDeleted(lesLignes[0], lesLignes[nb - 1]);
        }
    }
    public void suppLigne(int ligne) {
        //vipRepo.deleteObject(donnees.get(ligne));
        donnees.remove(ligne);
        fireTableRowsDeleted(ligne, ligne);
    }
    public void suppAll() {
        int tmp = donnees.size()-1;
        donnees.clear();
        fireTableRowsDeleted(0, tmp);
    }
}
